<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Tcl API programming notes</title>
    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
    <link rel="start" href="index.html" title="Berkeley DB Programmer's Reference Guide" />
    <link rel="up" href="tcl.html" title="Chapter 23.  Berkeley DB Extensions: Tcl" />
    <link rel="prev" href="tcl_using.html" title="Using Berkeley DB with Tcl" />
    <link rel="next" href="tcl_error.html" title="Tcl error handling" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <div class="libver">
        <p>Library Version 12.1.6.2</p>
      </div>
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">Tcl API programming notes</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="tcl_using.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 23.  Berkeley DB Extensions: Tcl </th>
          <td width="20%" align="right"> <a accesskey="n" href="tcl_error.html">Next</a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="sect1" lang="en" xml:lang="en">
      <div class="titlepage">
        <div>
          <div>
            <h2 class="title" style="clear: both"><a id="tcl_program"></a>Tcl API programming notes</h2>
          </div>
        </div>
      </div>
      <p>
        The Berkeley DB Tcl API does not attempt to avoid evaluating
        input as Tcl commands. For this reason, it may be dangerous to
        pass unreviewed user input through the Berkeley DB Tcl API, as
        the input may subsequently be evaluated as a Tcl command.
        Additionally, the Berkeley DB Tcl API initialization routine
        resets process' effective user and group IDs to the real user
        and group IDs, to minimize the effectiveness of a Tcl
        injection attack.
    </p>
      <p>
        The Tcl API closely parallels the Berkeley DB programmatic
        interfaces. If you are already familiar with one of those
        interfaces, there will not be many surprises in the Tcl
        API.
    </p>
      <p>
        The Tcl API currently does not support multithreading
        although it could be made to do so. The Tcl shell itself is
        not multithreaded and the Berkeley DB extensions use global
        data unprotected from multiple threads.
    </p>
      <p>
        Several pieces of Berkeley DB functionality are not
        available in the Tcl API. Any of the functions that require a
        user-provided function are not supported via the Tcl API. For
        example, there is no equivalent to the <a href="../api_reference/C/dbset_dup_compare.html" class="olink">DB-&gt;set_dup_compare()</a> or
        <a href="../api_reference/C/envset_errcall.html" class="olink">DB_ENV-&gt;set_errcall()</a> methods. Additionally, the heap access method
        is not available.
    </p>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="tcl_using.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="tcl.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="tcl_error.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">Using Berkeley DB with Tcl </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> Tcl error handling</td>
        </tr>
      </table>
    </div>
  </body>
</html>
